function Jacobian = calculate_Jacobian(para, DH_para, q)

Alpha = DH_para.Alpha;
A = DH_para.A;
D = DH_para.D;
Theta = DH_para.Theta;

q1 = q(1) + para(1); q2 = q(2) + para(2); q3 = q(3) + para(3);
q4 = q(4) + para(4); q5 = q(5) + para(5); q6 = q(6) + para(6);
a3 = A(3) + para(8); a4 = A(4) + para(9);
d1 = D(1) + para(7); d4 = D(4) + para(10); d5 = D(5) + para(11); d6 = D(6) + para(12);


Jacobian = [ d6*cos(q2 + q3 + q4)*sin(q1)*sin(q5) - a4*sin(q2 + q3)*sin(q1) - d6*cos(q1)*cos(q5) - a3*sin(q1)*sin(q2) - d5*sin(q2 + q3 + q4)*sin(q1) - d4*cos(q1),                        cos(q1)*(a4*cos(q2 + q3) + a3*cos(q2) + d5*cos(q2 + q3 + q4) + d6*sin(q2 + q3 + q4)*sin(q5)), cos(q1)*(a4*cos(q2 + q3) - (d6*cos(q2 + q3 + q4 + q5))/2 + (d6*cos(q2 + q3 + q4 - q5))/2 + d5*cos(q2 + q3 + q4)), cos(q1)*((d6*cos(q2 + q3 + q4 - q5))/2 - (d6*cos(q2 + q3 + q4 + q5))/2 + d5*cos(q2 + q3 + q4)),  d6*(sin(q1)*sin(q5) - cos(q2 + q3 + q4)*cos(q1)*cos(q5)), 0, 0, cos(q1)*sin(q2), sin(q2 + q3)*cos(q1), -sin(q1), sin(q2 + q3 + q4)*cos(q1), - cos(q5)*sin(q1) - cos(q2 + q3 + q4)*cos(q1)*sin(q5);
  a4*sin(q2 + q3)*cos(q1) - d4*sin(q1) + a3*cos(q1)*sin(q2) - d6*cos(q5)*sin(q1) + d5*sin(q2 + q3 + q4)*cos(q1) - d6*cos(q2 + q3 + q4)*cos(q1)*sin(q5),                        sin(q1)*(a4*cos(q2 + q3) + a3*cos(q2) + d5*cos(q2 + q3 + q4) + d6*sin(q2 + q3 + q4)*sin(q5)), sin(q1)*(a4*cos(q2 + q3) - (d6*cos(q2 + q3 + q4 + q5))/2 + (d6*cos(q2 + q3 + q4 - q5))/2 + d5*cos(q2 + q3 + q4)), sin(q1)*((d6*cos(q2 + q3 + q4 - q5))/2 - (d6*cos(q2 + q3 + q4 + q5))/2 + d5*cos(q2 + q3 + q4)), -d6*(cos(q1)*sin(q5) + cos(q2 + q3 + q4)*cos(q5)*sin(q1)), 0, 0, sin(q1)*sin(q2), sin(q2 + q3)*sin(q1),  cos(q1), sin(q2 + q3 + q4)*sin(q1),   cos(q1)*cos(q5) - cos(q2 + q3 + q4)*sin(q1)*sin(q5);
                                                                                                                                                     0, (d6*sin(q2 + q3 + q4 + q5))/2 - a4*sin(q2 + q3) - a3*sin(q2) - (d6*sin(q2 + q3 + q4 - q5))/2 - d5*sin(q2 + q3 + q4),           (d6*sin(q2 + q3 + q4 + q5))/2 - a4*sin(q2 + q3) - (d6*sin(q2 + q3 + q4 - q5))/2 - d5*sin(q2 + q3 + q4),           (d6*sin(q2 + q3 + q4 + q5))/2 - (d6*sin(q2 + q3 + q4 - q5))/2 - d5*sin(q2 + q3 + q4),  (d6*(sin(q2 + q3 + q4 + q5) + sin(q2 + q3 + q4 - q5)))/2, 0, 1,         cos(q2),         cos(q2 + q3),        0,         cos(q2 + q3 + q4),   cos(q2 + q3 + q4 - q5)/2 - cos(q2 + q3 + q4 + q5)/2];